package websimulator;

import java.util.Random;

public class Illumination {
	// Variabler
	private int area; // hus størrelse i kvadratt meter
	private int type; // belysnings type
	private int lampLightFlux; // antall lumen fra en lys kilde
	private int powerConsumption; // strøm forbrukk av en lys kilde
	private double illuminance; // nødvendige belysnings level (var 50) og (500)
	private double numberOfSources; // antall av lys kilder
	private double lightFlux; // antall lumen som brukes til å belyse huset
	private double lightning; // antall energi som brukes til belysning
	private double lightningHour; // antall energi som brukes til belysning i en
									// time
	private int sTime; // starttid for simulering
        private int time; // antall timer simulering
	private int consumption; // stroem forbruk per kvadrat meter
	private Random rand;

	/**
	 * Konstruktor
	 * 
	 * @param _area
	 *            hus størrelse i kvadratt meter
	 * @param _type
	 *            belysnings type
	 * @param _time
	 *            bruke tid
	 */

	public Illumination(int _area, int _type) 
        {
		area = _area;
		type = _type;
	}
        /**
         * Den konstruktoren skal brukes når vi beregner lys forbruk per time
         * @param _area - hus areal
         * @param _type - belysnings type
         * @param _illuminance - nødvendige belysnings level
         */

        public Illumination(int _area, int _type, double _illuminance)
        {
            area = _area;
            type = _type;
            illuminance = _illuminance;
        }

	/**
	 * Metode som beregner strøm forbruk for hus belysning
	 * 
	 * @return antall energi som brukes til belysning
	 */
	public double Calculation() {
			
		lightFlux = illuminance * area;
		lampType();
		// numberOfSources = (double)(lightFlux/lampLightFlux);
		numberOfSources = (double) lightFlux / lampLightFlux;
		System.out.println("Number of light sources " + numberOfSources);
		lightning = powerConsumption * numberOfSources;
		return lightning;
	}

	public void setTime(int _sTime) {
		sTime = _sTime;
	}

	/**
	 * Metode som innholder statistik for forskjelige belysnings type
	 */
	public void lampType() {
		if (type == 1)// glødelamper
		{
			lampLightFlux = 1630;
			powerConsumption = 100;
		} else if (type == 2)// lysstoffrør
		{
			lampLightFlux = 2000;
			powerConsumption = 40;
		} else// halogenpærer
		{
			lampLightFlux = 1600;
			powerConsumption = 55;
		}
	}

	public double Demo() {
		consumption = 24; // gjennomsnitt variabel (elektrooopvarming)

		lightning = consumption * area;

		return lightning;
	}
        
        public double varians()
        {
            double min, max;
            min = lightningHour * -0.05;
            max = lightningHour * 0.05;
        
       double var = ((min) + (int)(Math.random() * (max - (min) + 1))); 
       return var;
       
    }

	public double dayDemonstaration() {
		
                Calculation();
		if (time >= 0 && time <= 5) {
			lightningHour = (lightning * 0.01);
                        lightningHour += varians();
		} else if (time >= 6 && time <= 8) {
			lightningHour = (lightning * 0.08);
                        lightningHour += varians();
		} else if (time >= 9 && time <= 14) {
			lightningHour = (lightning * 0.01);
                        lightningHour += varians();
		} else if (time >= 15 && time <= 17) {
			lightningHour = (lightning * 0.04);
                        lightningHour += varians();
		} else if (time >= 18 && time <= 22) {
			lightningHour = (lightning * 0.095);
                        lightningHour += varians();
		} else if (time >= 23 && time <= 24) {
			lightningHour = (lightning * 0.03);
                        lightningHour += varians();
		}
		return lightningHour;
	}
        
        public double CalculationTime()
        {
            lightFlux = illuminance * area;
            lampType();
            
            numberOfSources = (double) lightFlux / lampLightFlux;
            lightningHour = powerConsumption * numberOfSources;
            return lightningHour;
        }

}// end of Illumination
